﻿#pragma once

#include "../GameplayController.h"

#include <SFML/Network.hpp>
#include "../../../domain/network/GameServer.h"
#include "../../../utils/gui/Form.h"


namespace Controllers {
	/**
	* Kontroler gry, w przypadku gry użytkownik programu założy serwer
	*/
	class ServerController: public GameplayController
	{
	protected:
		Domain::Network::GameServer* server; /**< Serwer gry */
		Players::Player* server_owner; /**< Gracz użytkownika programu, właściciel serwera */

	public:
		ServerController(Utils::GUI::Form*);
		virtual void startGame(); /**< Ustanawia serwer i rozpoczyna rozgrywkę */

	protected:
		/**  Przyporządkowuje graczy do klientów podłączonych do serwera */
		virtual Players::Player* createPlayer(Cards::PlayerCard*, Players::PLAYER_TYPE);
		/**
		* Tworzy odpowiednie kontrolery, uzywając widoków z przestrzeni nazw Views::Server.
		*/
		virtual TurnController* createTurnController();
		virtual void dealCards(); /**< Wybiera karty i rozsyła je poprzez serwer do pozostałych graczy */

		virtual void endGame(Domain::Configuration::GAME_END_REASON);
	};
}

